package com.allm.ai.api.context;

import com.allm.ai.api.dto.UserInfo;

/**
 * 用户上下文持有者 (User Context Holder)
 *
 * <p>
 * 使用 ThreadLocal 来存储当前请求线程的用户信息。
 * 这使得在请求处理的任何阶段（Controller, Service等）都能安全、方便地获取当前登录用户的信息，
 * 无需通过方法参数层层传递。
 * </p>
 */
public final class UserContextHolder {

    private static final ThreadLocal<UserInfo> userContext = new ThreadLocal<>();

    private UserContextHolder() {
        // 私有构造函数，防止实例化
    }

    /**
     * 为当前线程设置用户信息。
     * 通常在认证拦截器中调用。
     */
    public static void setUser(UserInfo userInfo) {
        userContext.set(userInfo);
    }

    /**
     * 获取当前线程的用户信息。
     */
    public static UserInfo getUser() {
        return userContext.get();
    }

    /**
     * 清除当前线程的上下文信息。
     * 必须在请求处理完成后调用，以防内存泄漏。
     */
    public static void clear() {
        userContext.remove();
    }
}